#include<bits/stdc++.h>
using namespace std;
#define DZ 85000
char disks[1005][DZ]={""};
int disk_size;

int main(){
    int n, s, l;
    scanf("%d %d %d", &n,&s,&l);
    int d;
    scanf("%d%*c",&d);
    fgets(disks[d], DZ, stdin);
    disk_size = strlen(disks[d])/8;
    for(int i=1;i<l;i++){    
        scanf("%d%*c",&d);
        fgets(disks[d], DZ, stdin);
    }
    int m;
    scanf("%d",&m);
    while(m--){
        int rb_no;
        scanf("%d", &rb_no);
        int s_bo = rb_no/s;
        int row = s_bo/(n-1);
        int disk_no = (s_bo)%n;
        int blk_no = row * s + (rb_no % s);
        if(blk_no >= disk_size ||  (disks[disk_no][0] == '\0' && n-l > 1)){
           puts("-");
        }else if(disks[disk_no][0] != '\0'){            
             for(int i=0;i<8;i++){
                putchar(disks[disk_no][blk_no * 8+i]);
            }
            puts("");
        }else{
            int ans=0,k;
            for(int i=0;i<n;++i){                
                if(i != disk_no){
                    char temp[9]={0};
                    for(int t=0;t<8;t++){
                        temp[t] = disks[i][blk_no * 8 + t];
                    }
                    temp[8] = 0;
                    sscanf(temp,"%x",&k);
                    ans ^= k;
                }
            }
            printf("%08X\n",ans);
        }
    }
    return 0;
}